문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 디자인 패턴 (문단 편집) ==== 오남용 문제 ==== 싱글톤은 오남용이 가장 심한 패턴이다. 데이터 저장용 클래스를 싱글톤으로 만들어서 전역변수의 대체품으로 사용하는 경우가 많은데, 디자인 패턴을 고려하기 전에 애초에 그런 전역변수를 만들었다는 것 자체가 문제다. 객체지향은 커녕 그 이전의 구조화/모듈화 프로그래밍 수준의 설계 조차도 하지 않았다는 것이며, 프로그래밍의 원시시대의 방법인 전역변수 위주의 스파게티 프로그래밍과 차이점이 없다.[* 자바와 같은 훌륭한 객체지향 언어를 사용한다고 해도 정적 메소드로 데이터를 처리하고 싱글톤에 저장한다면, 함수로 데이터를 처리하고 전역변수에 저장하는 60년대에 쓰여진 프로그램과 다를바 없다.] 싱글톤 패턴은 전역변수처럼 사용하라고 고안된 것이 아니며, 전역변수같은 사용법만 있다면 존재할 필요 조차 없다. 정적 클래스로 만들거나 차라리 그냥 전역변수를 쓰는 것이 그나마 덜 나쁘다.[* '그나마 덜 나쁜' 이유는 그런 전역변수같은 것이 필요한 상황은 곧 제대로 설계가 되지 않은 상태이기 때문이다.] 오남용되고 있는 수많은 싱글톤 패턴의 대부분은 다른 오브젝트의 인스턴스 멤버로 하는 것이 훨씬 간결하고 좋은 설계다. 파사드(Facade)나 전략(Strategy)처럼 가장 쉬운 패턴 조차 모르는 초심자들이 이상하게도 싱글톤만은 알고 있는 경우가 많아서 오남용은 나날이 증대되고 있는 실정이다. 초심자라면 싱글톤 패턴은 차라리 없다고 생각하는 것이 낫다. GOF의 디자인 패턴의 독자를 위한 가이드(Guide to Readers)에 객체지향 개발 경험이 많지 않은 독자들을 위해서 가장 간단하고 일반적인 패턴부터 시작하라며 몇몇 패턴들[* Abstract Factory, Factory Method, Adaptor, Observer, Composite, Strategy, Decorator, Template Method]을 소개하고 있는데, 여기에 싱글톤 패턴은 없다. 싱글톤 패턴을 사용하는 것이 좋은 설계가 되는 경우는 다음과 같다. * 속성이 없거나, 있어도 모두 읽기전용인 경우 * 인스턴스 메소드(정적 메소드가 아닌)가 하나 이상 있는 경우 위와 같은 경우는 좀처럼 없다는 것을 알 수 있다. 실제로 싱글톤 패턴이 사용되는 사례는 다음과 같은 경우이다. * 추상 팩토리(Abstract Factory) 패턴의 콘크리트 팩토리 클래스는 대부분의 경우 하나의 인스턴스만 필요함 * 빌더(Builder) 패턴의 내부 빌더 클래스 * 프로토타입(Prototype) 패턴의 콘크리트 프로토타입 클래스 * 파사드(Facade) 패턴에서 파사드 클래스가 속성을 갖지 않는 경우저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기